home *** CD-ROM | disk | FTP | other *** search
/ MacFormat 1995 August / macformat-027.iso / mac / Shareware City / Developers / MDP-80 Folder / Documentation / Monitor Source Code.text < prev    next >
Encoding:
Text File  |  1994-09-12  |  39.0 KB  |  913 lines  |  [TEXT/ALFA]

  1.  
  2.  
  3.                      ** System Monitor Source Code **
  4.  
  5.  
  6.    1-             ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  7.    2-             ;                                             ;
  8.    3-             ; MDP-80 SYSTEM MONITOR , VERSION 1.0, RTK.   ;
  9.    4-             ; ------------------------------------------- ;
  10.    5-             ;                                             ;
  11.    6-             ; LAST MOD:  11.10.93                         ;
  12.    7-             ;                                             ;
  13.    8-             ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  14.    9-            
  15.   10-             ;
  16.   11-             ;  TO BE ADDED:        LIST TO HANDLE RELATIVE INSTRUCTIONS PROPERLY
  17.   12-             ;
  18.   13-            
  19.   14-            
  20.   15-             #ORG F800                    ; START OF MONITOR
  21.   16-            
  22.   17-            
  23.   18-             ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  24.   19-             ;                                                         ;
  25.   20-             ;                     MONITOR EQUATES                     ;
  26.   21-             ;                                                         ;
  27.   22-             ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  28.   23-            
  29.   24-            
  30.   25-             #EQU  KOUT   0200            ; CHARACTER OUT
  31.   26-             #EQU  CSTB   0201            ; CHARACTER OUT STROBE
  32.   27-             #EQU  KBDS   0202            ; KEYBOARD STROBE
  33.   28-             #EQU  KEYB   0203            ; KEYBOARD CHARACTER
  34.   29-             #EQU  STAK   0100            ; START OF STACK
  35.   30-             #EQU  COLD   FFFD            ; CPU COLD START
  36.   31-             #EQU  BREAK  FFFA           ; BRK VECTOR
  37.   32-             #EQU  TEXT   0300            ; TEXT INPUT BUFFER
  38.   33-             #EQU  ZERO   0000            ; ENTRANCE TO EXTERNAL ROUTINES
  39.   34-            
  40.   35-            
  41.   36-             ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  42.   37-             ;                                                         ;
  43.   38-             ;                  MAIN MONITOR ROUTINE                   ;
  44.   39-             ;                                                         ;     
  45.   40-             ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  46.   41-            
  47.   42-             ; MONITOR COLD START - PRINTS STARTUP MESSAGE
  48.   43-            
  49.   44-  F800: A9 0C       ._MON        LDA #0C                        ; CLEAR THE SCREEN
  50.   45-  F802: 20 F8 76    JSR _COUT
  51.   46-  F805: A9 F8       LDA >MESSAGE                ; GET HIGH BYTE
  52.   47-  F807: A8 0F       LDX <MESSAGE                ; AND LOW BYTE
  53.   48-  F809: 20 F8 D2    JSR _PRINT                    ; PRINT THE TEXT
  54.   49-  F80C: 4C F8 32    JMP _MON1                    ; SKIP OVER TEXT
  55.   50-  F80F: 4D44502D3830204D6F6E69746F7220524F4D   .MESSAGE    ASC 'MDP-80 Monitor ROM'    ; STARTUP MESSAGE
  56.   51-  F821: 2076657273696F6E20312E30   ASC ' version 1.0'
  57.   52-  F82D: 0D0D00   HEX 0D0D00                    ; NULL IS END-OF-STRING MARKER
  58.   53-  F830: 0100   .VERSION    HEX 0100                    ; MONITOR VERSION - 01.00
  59.   54-            
  60.   55-             ; MONITOR WARM START - INPUT A LINE AND EXECUTE IT
  61.   56-            
  62.   57-  F832: A9 20       ._MON1        LDA #20                        ; SET UP GO VECTOR
  63.   58-  F834: C6 00       STA $00
  64.   59-  F836: A9 60       LDA #60
  65.   60-  F838: C6 03       STA $03
  66.   61-  F83A: 20 F8 84    JSR _INPUT                    ; PRINT PROMPT & GET LINE
  67.   62-  F83D: A9 03       LDA >TEXT
  68.   63-  F83F: A8 00       LDX <TEXT
  69.   64-  F841: 20 F9 28    JSR _UPPER                    ; MAKE LINE UPPERCASE
  70.   65-  F844: A9 03       LDA >TEXT
  71.   66-  F846: A8 00       LDX <TEXT
  72.   67-  F848: 20 F9 52    JSR _KILLB                    ; REMOVE BLANKS
  73.   68-  F84B: 20 FA 60    JSR _EXECUTE                ; EXECUTE LINE
  74.   69-  F84E: 4C F8 32    JMP _MON1                    ; AND GET THE NEXT COMMAND
  75.   70-            
  76.   71-             ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;            
  77.   72-             ;                                                         ;
  78.   73-             ;                 SUBROUTINE DEFINITIONS                  ;
  79.   74-             ;                                                         ;
  80.   75-             ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  81.   76-            
  82.   77-             ;
  83.   78-             ; _BRK        OUTPUT REGISTER VALUES AND JUMP TO _MON1
  84.   79-             ;
  85.   80-            
  86.   81-  F851: 20 FF 7F    ._BRK        JSR _REG
  87.   82-  F854: A9 F8       LDA >STRNG
  88.   83-  F856: A8 5E       LDX <STRNG
  89.   84-  F858: 20 F8 D2    JSR _PRINT
  90.   85-  F85B: 4C F8 67    JMP NXTBRK
  91.   86-  F85E: 427265616B204020   .STRNG        ASC 'Break @ '
  92.   87-  F866: 00   HEX 00
  93.   88-  F867: C0 01       .NXTBRK        LDA $01
  94.   89-  F869: C2 02       LDX $02
  95.   90-  F86B: 20 F9 20    JSR _PRINTWORD
  96.   91-  F86E: A9 0D       LDA #0D
  97.   92-  F870: 20 F8 76    JSR _COUT
  98.   93-  F873: 4C F8 32    JMP _MON1
  99.   94-            
  100.   95-             ;
  101.   96-             ; _COUT        PRINT CHARACTER IN A
  102.   97-             ;
  103.   98-            
  104.   99-  F876: B9 02 00    ._COUT        STA KOUT                    ; STORE A IN KOUT
  105.  100-  F879: 46 02 01    INC CSTB                    ; OUTPUT CHARACTER
  106.  101-  F87C: 60          RTS
  107.  102-            
  108.  103-             ;
  109.  104-             ; _KEYIN    GET A CHARACTER FROM THE KEYBOARD
  110.  105-             ;
  111.  106-            
  112.  107-  F87D: 46 02 02    ._KEYIN        INC KBDS                    ; SET KEYBOARD IN STROBE
  113.  108-  F880: AA 02 03    LDA KEYB                    ; PUT KEY INTO A
  114.  109-  F883: 60          RTS
  115.  110-            
  116.  111-             ;            
  117.  112-             ; _INPUT    INPUT A LINE OF TEXT TO $0300 (TEXT).  X HOLDS LENGTH ON EXIT.
  118.  113-             ;
  119.  114-            
  120.  115-  F884: A9 2A       ._INPUT        LDA #2A                        ; * PROMPT
  121.  116-  F886: 20 F8 76    JSR _COUT
  122.  117-  F889: A8 00       ._INPUT1    LDX #00                        ; CLEAR LENGTH COUNTER
  123.  118-  F88B: 20 F8 7D    .LOOP        JSR _KEYIN                    ; GET A CHARACTER
  124.  119-  F88E: 20 F8 76    JSR _COUT                    ; AND ECHO IT
  125.  120-  F891: BD 03 00    STA TEXT,X                    ; PUT IN BUFFER
  126.  121-  F894: 88 0D       CMP #0D                        ; IS IT RETURN?
  127.  122-  F896: D3 F8 BD    BEQ DONE                    ; YES, EXIT
  128.  123-  F899: 88 08       CMP #08                        ; IS IT BACKSPACE?
  129.  124-  F89B: D3 F8 AA    BEQ DEL                        ; YES, DELETE CHARACTER
  130.  125-  F89E: 88 7F       CMP #7F                        ; IS IT DELETE?
  131.  126-  F8A0: D3 F8 AA    BEQ DEL                        ; YES, DELETE CHARACTER
  132.  127-  F8A3: E8          INX                            ; READY FOR NEXT CHARACTER
  133.  128-  F8A4: D3 F8 BD    BEQ DONE                    ; IS X>FF? IF SO THEN DONE
  134.  129-  F8A7: 4C F8 8B    JMP LOOP                    ; GET ANOTHER CHARACTER
  135.  130-  F8AA: 86 00       .DEL        CPX #00                        ; ANYTHING TO DELETE?
  136.  131-  F8AC: D3 F8 8B    BEQ LOOP                    ; NO
  137.  132-  F8AF: C7          DEX                            ; DELETE CHAR IN BUFFER
  138.  133-  F8B0: A9 20       LDA #20                     ; PRINT A BLANK
  139.  134-  F8B2: 20 F8 76    JSR _COUT                    ; TO CLEAR DELETED CHARACTER
  140.  135-  F8B5: A9 08       LDA #08                        ; AND BACK UP
  141.  136-  F8B7: 20 F8 76    JSR _COUT                    ; AGAIN
  142.  137-  F8BA: 4C F8 8B    JMP LOOP                    ; GET MORE CHARACTERS
  143.  138-  F8BD: 86 00       .DONE        CPX #00                        ; NEED TO ADJUST LENGTH?
  144.  139-  F8BF: D3 F8 CA    BEQ NOCHAR                    ; NO CHARACTERS
  145.  140-  F8C2: A9 00       LDA #00                        ; PUT A 0 IN A
  146.  141-  F8C4: BD 03 00    STA TEXT,X                    ; AND STORE AFTER STRING
  147.  142-  F8C7: 4C F8 D0    JMP FINISH                    ; AND FINISH
  148.  143-  F8CA: B8 03 00    .NOCHAR        STX TEXT                    ; SPECIAL CASE
  149.  144-  F8CD: 4C F8 D1    JMP END                        ; OF NO CHARACTERS
  150.  145-  F8D0: C7          .FINISH        DEX                            ; ADJUST LENGTH            
  151.  146-  F8D1: 60          .END        RTS
  152.  147-            
  153.  148-             ;
  154.  149-             ; _PRINT    PRINT A NULL TERMINATED STRING STARTING AT A (HIGH) & X (LOW)
  155.  150-             ;
  156.  151-            
  157.  152-  F8D2: C6 06       ._PRINT        STA $06                        ; PUT IN STRING ADDRESS IN SCRATCH
  158.  153-  F8D4: C8 07       STX $07                        ; LOW BYTE TOO
  159.  154-  F8D6: A8 00       .PRINT1        LDX #00                        ; CLEAR COUNTER AND PRINT
  160.  155-  F8D8: 61 00 06    .LOOP2        LDA ($0006),X                ; GET A CHARACTER
  161.  156-  F8DB: D3 F8 E8    BEQ DONE2                    ; NULL SO EXIT
  162.  157-  F8DE: 20 F8 76    JSR _COUT                    ; PRINT CHARACTER
  163.  158-  F8E1: E8          INX                            ; MOVE TO NEXT CHARACTER IN STRING
  164.  159-  F8E2: D3 F8 E8    BEQ DONE2                    ; PRINTED 255, EXIT
  165.  160-  F8E5: 4C F8 D8    JMP LOOP2                    ; PRINT ANOTHER CHARACTER
  166.  161-  F8E8: 60          .DONE2        RTS
  167.  162-            
  168.  163-             ;
  169.  164-             ;  _PRINTHEX    OUTPUT A AS A HEXADECIMAL NUMBER, A IS UNCHANGED
  170.  165-             ;
  171.  166-            
  172.  167-  F8E9: C6 06       ._PRINTHEX    STA $06                     ; MONITOR SCRATCH LOCATION
  173.  168-  F8EB: A0 F0       AND #F0                        ; MASK LSN
  174.  169-  F8ED: 29          RSH                            ; AND MOVE MSN TO LSN
  175.  170-  F8EE: 29          RSH
  176.  171-  F8EF: 29          RSH
  177.  172-  F8F0: 29          RSH
  178.  173-  F8F1: 88 09       CMP #09                         ; GREATER THAN 9?
  179.  174-  F8F3: D9 F8 FF    BGT HEX1                    ; YES, OUTPUT LETTER
  180.  175-  F8F6: 54          CLC                            ; NO, ADD $30 TO GET
  181.  176-  F8F7: A5 30       ADC #30                        ; ASCII FOR DIGIT
  182.  177-  F8F9: 20 F8 76    JSR _COUT                    ; PRINT FIRST DIGIT
  183.  178-  F8FC: 4C F9 05    JMP NEXT                    ; GO TO NEXT DIGIT
  184.  179-  F8FF: 54          .HEX1        CLC                         ; ADD $37 TO 
  185.  180-  F900: A5 37       ADC #37                     ; GET LETTER
  186.  181-  F902: 20 F8 76    JSR _COUT                    ; AND PRINT DIGIT
  187.  182-  F905: C0 06       .NEXT        LDA $06                        ; GET ORIGINAL FROM SCRATCH
  188.  183-  F907: A0 0F       AND #0F                        ; KILL UPPER BITS
  189.  184-  F909: 88 09       CMP #09                     ; GREATER THAN 9?
  190.  185-  F90B: D9 F9 17    BGT HEX2                    ; YES, OUTPUT LETTER
  191.  186-  F90E: 54          CLC                            ; NO, ADD $30 TO GET
  192.  187-  F90F: A5 30       ADC #30                        ; ASCII FOR DIGIT
  193.  188-  F911: 20 F8 76    JSR _COUT                    ; PRINT SECOND DIGIT
  194.  189-  F914: 4C F9 1D    JMP END2                    ; GO TO NEXT DIGIT
  195.  190-  F917: 54          .HEX2        CLC                            ; ADD $37 TO 
  196.  191-  F918: A5 37       ADC #37                         ; GET LETTER
  197.  192-  F91A: 20 F8 76    JSR _COUT                    ; AND PRINT DIGIT
  198.  193-  F91D: C0 06       .END2        LDA $06                        ; RECOVER INITIAL A VALUE
  199.  194-  F91F: 60          RTS                            ; EXIT
  200.  195-            
  201.  196-             ;
  202.  197-             ;  _PRINTWORD     OUTPUTS A & X AS 16-BIT NUMBER - DESTROYS A
  203.  198-             ;
  204.  199-            
  205.  200-  F920: 20 F8 E9    ._PRINTWORD    JSR _PRINTHEX                ; PRINT A
  206.  201-  F923: 12          TXA                            ; PUT X IN A
  207.  202-  F924: 20 F8 E9    JSR _PRINTHEX                ; PRINT IT
  208.  203-  F927: 60          RTS                            ; EXIT
  209.  204-            
  210.  205-             ;
  211.  206-             ;  _UPPER      MAKES THE NULL TERMINATED STRING IN AX UPPERCASE
  212.  207-             ;
  213.  208-            
  214.  209-  F928: C6 06       ._UPPER        STA $06                        ; PUT IN SCRATCH SPACE
  215.  210-  F92A: C8 07       STX $07
  216.  211-  F92C: A8 00       ._UPPER1    LDX #00                        ; CLEAR INDEX
  217.  212-  F92E: 61 00 06    .LOOP3        LDA ($0006),X                ; GET A CHARACTER
  218.  213-  F931: D3 F9 51    BEQ DONE3                    ; ZERO SO EXIT
  219.  214-  F934: 88 60       CMP #60                        ; IS A > 'a' ?
  220.  215-  F936: D9 F9 3C    BGT RANGE1                    ; YES
  221.  216-  F939: 4C F9 4A    JMP NEXT2                    ; NO, GO TO NEXT LETTER
  222.  217-  F93C: 88 7B       .RANGE1        CMP #7B                        ; IS A < 'z' ?
  223.  218-  F93E: D7 F9 44    BLT RANGE2                    ; YES
  224.  219-  F941: 4C F9 4A    JMP NEXT2                    ; NO, GO TO NEXT LETTER
  225.  220-  F944: 55          .RANGE2        SEC                            ; IN RANGE
  226.  221-  F945: A4 20       SBC #20                        ; SUBTRACT DECIMAL 32
  227.  222-  F947: 63 00 06    STA ($0006),X                ; PUT IN STRING
  228.  223-  F94A: E8          .NEXT2        INX                            ; GO TO NEXT LETTER
  229.  224-  F94B: D3 F9 51    BEQ DONE3                    ; REACHED MAX. LENGTH SO EXIT
  230.  225-  F94E: 4C F9 2E    JMP LOOP3 
  231.  226-  F951: 60          .DONE3        RTS                            ; EXIT
  232.  227-            
  233.  228-             ;
  234.  229-             ; _KILLB    REMOVE BLANKS FROM THE NULL TERMINATED STRING IN AX
  235.  230-             ;
  236.  231-            
  237.  232-  F952: C6 06       ._KILLB     STA $06
  238.  233-  F954: C8 07       STX $07
  239.  234-  F956: A8 00       ._KILLB1    LDX #00
  240.  235-  F958: 61 00 06    .LOOPK        LDA ($0006),X                ; GET CHARACTER
  241.  236-  F95B: 88 00       CMP #00                        ; NULL, SO END OF STRING
  242.  237-  F95D: D3 F9 88    BEQ DONEK            
  243.  238-  F960: 88 20       CMP #20                        ; BLANK, SO KILL IT
  244.  239-  F962: D3 F9 6C    BEQ SHIFT
  245.  240-  F965: E8          INX                            ; GO TO NEXT CHARACTER
  246.  241-  F966: D3 F9 88    BEQ DONEK                    ; FINISH IF 255
  247.  242-  F969: 4C F9 58    JMP LOOPK
  248.  243-  F96C: 12          .SHIFT        TXA
  249.  244-  F96D: 13          TAY                            ; PUT X IN Y TO SAVE IT
  250.  245-  F96E: E8          INX
  251.  246-  F96F: 61 00 06    .LOOPS        LDA ($0006),X                ; GET NEXT CHARACTER
  252.  247-  F972: C7          DEX
  253.  248-  F973: 63 00 06    STA ($0006),X                ; AND SHIFT OVER ONE
  254.  249-  F976: E8          INX
  255.  250-  F977: E8          INX                            ; GO TO NEXT CHARACTER
  256.  251-  F978: D3 F9 83    BEQ DONES                    ; DONE 255
  257.  252-  F97B: 88 00       CMP #00                        ; WAS IT THE END OF THE STRING?
  258.  253-  F97D: D3 F9 83    BEQ DONES                    ; YES
  259.  254-  F980: 4C F9 6F    JMP LOOPS                    ; NO
  260.  255-  F983: 11          .DONES        TYA
  261.  256-  F984: 14          TAX                            ; RESTORE X
  262.  257-  F985: 4C F9 58    JMP LOOPK                    ; CONTINUE
  263.  258-  F988: 60          .DONEK        RTS
  264.  259-            
  265.  260-             ;
  266.  261-             ; _LENGTH    FINDS THE LENGTH OF THE NULL TERMINATED STRING THAT STARTS
  267.  262-             ;            AT THE ADDRESS IN $06 & $07.  THE LENGTH IS RETURNED IN X
  268.  263-             ;
  269.  264-            
  270.  265-  F989: A8 00       ._LENGTH    LDX #00                        ; CLEAR X
  271.  266-  F98B: 61 00 06    .LOOPL        LDA ($0006),X                ; GET CHARACTER
  272.  267-  F98E: D3 F9 9A    BEQ QUIT                    ; LAST CHARACTER, EXIT
  273.  268-  F991: E8          INX
  274.  269-  F992: D3 F9 98    BEQ MAX                        ; 255 CHARACTERS
  275.  270-  F995: 4C F9 8B    JMP LOOPL
  276.  271-  F998: A8 FF       .MAX        LDX #FF                        ; INDICATE MAXIMUM LENGTH
  277.  272-  F99A: 60          .QUIT        RTS
  278.  273-            
  279.  274-             ;
  280.  275-             ; _MAKEHEX    CONVERTS THE ASCII CHARACTER IN A INTO A HEX DIGIT
  281.  276-             ;            IT SETS $05 TO ZERO IF NOT A DIGIT.  USES Y.
  282.  277-            
  283.  278-  F99B: 88 3A       ._MAKEHEX    CMP #3A                        ; IS A < '9'+1 ?
  284.  279-  F99D: D7 F9 B0    BLT DIGIT1                    ; YES, CONVERT IT AS NUMBER
  285.  280-  F9A0: 88 41       CMP #41                        ; IS A < 'A' ?
  286.  281-  F9A2: D7 F9 BE    BLT ERRM
  287.  282-  F9A5: 88 46       CMP #46                        ; IS A > 'F' ?
  288.  283-  F9A7: D9 F9 BE    BGT ERRM
  289.  284-  F9AA: 55          SEC
  290.  285-  F9AB: A4 37       SBC #37                        ; SUBTRACT TO GET VALUE
  291.  286-  F9AD: 4C F9 C2    JMP DONEH
  292.  287-  F9B0: 88 2F       .DIGIT1        CMP #2F                        ; IS A > '0'-1 ?
  293.  288-  F9B2: D9 F9 B8    BGT OK1
  294.  289-  F9B5: 4C F9 BE    JMP ERRM    
  295.  290-  F9B8: 55          .OK1        SEC
  296.  291-  F9B9: A4 30       SBC #30                        ; SUBTR. TO GET VALUE
  297.  292-  F9BB: 4C F9 C2    JMP DONEH
  298.  293-  F9BE: A6 00       .ERRM        LDY #00
  299.  294-  F9C0: CA 05       STY $05                        ; SET FLAG
  300.  295-  F9C2: 60          .DONEH        RTS
  301.  296-            
  302.  297-             ;
  303.  298-             ; _MAKEBYTE    TAKES TWO DIGITS FROM STRING IN $06 & $07 AND CREATES
  304.  299-             ;            A BYTE WHICH IS STORED IN $04.  INCREMENTS X.
  305.  300-             ;
  306.  301-            
  307.  302-  F9C3: 61 00 06    ._MAKEBYTE    LDA ($0006),X                ; GET FIRST DIGIT
  308.  303-  F9C6: 20 F9 9B    JSR _MAKEHEX                ; CONVERT TO HEX
  309.  304-  F9C9: 26          LSH                            ; SHIFT TO UPPER NIBBLE
  310.  305-  F9CA: 26          LSH
  311.  306-  F9CB: 26          LSH
  312.  307-  F9CC: 26          LSH
  313.  308-  F9CD: C6 04       STA $04
  314.  309-  F9CF: E8          INX
  315.  310-  F9D0: 61 00 06    LDA ($0006),X
  316.  311-  F9D3: 20 F9 9B    JSR _MAKEHEX
  317.  312-  F9D6: 54          CLC
  318.  313-  F9D7: B5 00 04    ADC $0004                    ; ADD
  319.  314-  F9DA: C6 04       STA $04                        ; BYTE COMPLETED
  320.  315-  F9DC: 60          RTS
  321.  316-            
  322.  317-             ;
  323.  318-             ; _NUMBER    CONVERTS THE NULL TERMINATED STRING IN AX INTO AN ADDRESS
  324.  319-             ;            AND PLACES IT IN THE MONITOR SCRATCH LOCATIONS ($01 & $02)
  325.  320-             ;            STORES RESULT OF CONVERSION IN $05 ( 0 = ERROR, 1 = OKAY )
  326.  321-             ;           
  327.  322-            
  328.  323-  F9DD: C6 06       ._NUMBER    STA $06
  329.  324-  F9DF: C8 07       STX $07
  330.  325-  F9E1: A8 00       ._NUMBER1    LDX #00
  331.  326-  F9E3: C8 05       STX $05 
  332.  327-  F9E5: 46 00 05    INC $0005                    ; SET FOR NO ERROR INITIALLY
  333.  328-  F9E8: 20 F9 89    JSR _LENGTH                    ; GET THE LENGTH
  334.  329-  F9EB: 86 00       CPX #00                        ; NO LENGTH - ERROR
  335.  330-  F9ED: D3 FA 4C    BEQ ERRORN
  336.  331-  F9F0: 86 04       CPX #04
  337.  332-  F9F2: D9 FA 4C    BGT ERRORN                    ; TOO MANY DIGITS
  338.  333-  F9F5: D3 FA 38    BEQ FOURN
  339.  334-  F9F8: 86 03       CPX #03
  340.  335-  F9FA: D3 FA 23    BEQ THREEN
  341.  336-  F9FD: 86 02       CPX #02
  342.  337-  F9FF: D3 FA 13    BEQ TWON
  343.  338-  FA02: A8 00       .ONEN        LDX #00                        ; SINGLE DIGIT
  344.  339-  FA04: 61 00 06    LDA ($0006),X
  345.  340-  FA07: 20 F9 9B    JSR _MAKEHEX
  346.  341-  FA0A: C6 02       STA $02
  347.  342-  FA0C: A9 00       LDA #00
  348.  343-  FA0E: C6 01       STA $01
  349.  344-  FA10: 4C FA 4F    JMP DONEN
  350.  345-  FA13: A8 00       .TWON        LDX #00                        ; TWO DIGITS
  351.  346-  FA15: 20 F9 C3    JSR _MAKEBYTE
  352.  347-  FA18: C0 04       LDA $04
  353.  348-  FA1A: C6 02       STA $02
  354.  349-  FA1C: A9 00       LDA #00
  355.  350-  FA1E: C6 01       STA $01
  356.  351-  FA20: 4C FA 4F    JMP DONEN
  357.  352-  FA23: A8 00       .THREEN        LDX #00                        ; THREE DIGITS
  358.  353-  FA25: 61 00 06    LDA ($0006),X
  359.  354-  FA28: 20 F9 9B    JSR _MAKEHEX
  360.  355-  FA2B: C6 01       STA $01
  361.  356-  FA2D: E8          INX
  362.  357-  FA2E: 20 F9 C3    JSR _MAKEBYTE
  363.  358-  FA31: C0 04       LDA $04
  364.  359-  FA33: C6 02       STA $02
  365.  360-  FA35: 4C FA 4F    JMP DONEN
  366.  361-  FA38: A8 00       .FOURN        LDX #00
  367.  362-  FA3A: 20 F9 C3    JSR _MAKEBYTE                ; MAKE A BYTE
  368.  363-  FA3D: C0 04       LDA $04
  369.  364-  FA3F: C6 01       STA $01                        ; PUT HIGH BYTE IN PLACE
  370.  365-  FA41: E8          INX
  371.  366-  FA42: 20 F9 C3    JSR _MAKEBYTE
  372.  367-  FA45: C0 04       LDA $04
  373.  368-  FA47: C6 02       STA $02                        ; PUT LOW BYTE IN PLACE
  374.  369-  FA49: 4C FA 4F    JMP DONEN                    ; EXIT
  375.  370-  FA4C: 45 00 05    .ERRORN        DEC $0005                    ; SET ERROR
  376.  371-  FA4F: 60          .DONEN        RTS        
  377.  372-            
  378.  373-             ;
  379.  374-             ; _ADD16    ADD THE SIXTEEN BIT NUMBER IN $01 & $02 TO THE SIXTEEN BIT
  380.  375-             ;             NUMBER IN $0A & $0B.  RESULT IN $01 & $02.
  381.  376-             ;
  382.  377-            
  383.  378-  FA50: 54          ._ADD16        CLC
  384.  379-  FA51: C0 02       LDA $02
  385.  380-  FA53: B5 00 0B    ADC $000B
  386.  381-  FA56: C6 02       STA $02
  387.  382-  FA58: C0 01       LDA $01
  388.  383-  FA5A: B5 00 0A    ADC $000A
  389.  384-  FA5D: C6 01       STA $01
  390.  385-  FA5F: 60          RTS
  391.  386-            
  392.  387-             ;
  393.  388-             ; _EXECUTE    EXECUTES THE COMMAND IN THE TEXT BUFFER
  394.  389-             ;
  395.  390-             ;  COMMANDS ARE: 
  396.  391-             ;
  397.  392-             ;       G <ADDRESS>            -    GO AT ADDRESS
  398.  393-             ;        L <ADDRESS>            -    LIST 25 LINES STARTING @ ADDRESS (DISASSEMBLED)
  399.  394-             ;        S <ADDRESS>            -    SUBSTITUTE/VIEW MEMORY @ ADDRESS
  400.  395-             ;        X <ADDRESS>            -    HEX DUMP A SCREEN IN STARTING @ ADDRESS
  401.  396-             ;       !                    -   CLEAR THE SCREEN & HOME CURSOR
  402.  397-             ;       <ADDRESS>            -    SHOW THE CONTENTS OF <ADDRESS>
  403.  398-             ;
  404.  399-            
  405.  400-  FA60: AA 03 00    ._EXECUTE    LDA TEXT                    ; GET FIRST LETTER OF COMMAND
  406.  401-  FA63: 88 00       CMP #00                        ; NULL LINE
  407.  402-  FA65: D3 FF 7E    BEQ DONE4                    ; EXIT
  408.  403-  FA68: 88 47       CMP #47                        ; G - GO
  409.  404-  FA6A: D3 FA 9B    BEQ GO
  410.  405-  FA6D: 88 4C       CMP #4C                        ; L - LIST
  411.  406-  FA6F: D3 FA AB    BEQ LIST
  412.  407-  FA72: 88 53       CMP #53                        ; S - SUBSTITUTE
  413.  408-  FA74: D3 FE 99    BEQ CHANGE
  414.  409-  FA77: 88 58       CMP #58                        ; X - DUMP
  415.  410-  FA79: D3 FF 0E    BEQ DUMP
  416.  411-  FA7C: 88 21       CMP #21
  417.  412-  FA7E: D3 FF 79    BEQ HOME                    ; ! - HOME
  418.  413-  FA81: A9 03       LDA #03
  419.  414-  FA83: A8 00       LDX #00
  420.  415-  FA85: 20 F9 DD    JSR _NUMBER                    ; IS IT AN ADDRESS?
  421.  416-  FA88: C0 05       LDA $05                        ; ERROR CODE
  422.  417-  FA8A: D3 FA 90    BEQ GARBAGE                    ; =0 , GARBAGE
  423.  418-  FA8D: 4C FF 5B    JMP ADDR                    ; SHOW CONTENTS OF ADDRESS
  424.  419-            
  425.  420-  FA90: A9 3F       .GARBAGE    LDA #3F                        ; UNKNOWN, PRINT ? AND RETURN
  426.  421-  FA92: 20 F8 76    JSR _COUT
  427.  422-  FA95: A9 0D       LDA #0D
  428.  423-  FA97: 20 F8 76    JSR _COUT
  429.  424-  FA9A: 60          RTS
  430.  425-            
  431.  426-  FA9B: A9 03       .GO            LDA #03                        ; EXECUTE A ROUTINE
  432.  427-  FA9D: A8 01       LDX #01
  433.  428-  FA9F: 20 F9 DD    JSR _NUMBER                    ; CONVERT ADDRESS
  434.  429-  FAA2: C0 05       LDA $05                        ; GET CONVERSION FLAG
  435.  430-  FAA4: D3 FA 90    BEQ GARBAGE                    ; IF = 0 THEN ERROR
  436.  431-  FAA7: 20 00 00    JSR ZERO                    ; NO ERROR, EXECUTE
  437.  432-  FAAA: 60          RTS                            ; AND RETURN TO MONITOR
  438.  433-            
  439.  434-  FAAB: A9 00       .LIST        LDA #00
  440.  435-  FAAD: C6 0A       STA $0A
  441.  436-  FAAF: AE          INA
  442.  437-  FAB0: C6 0B       STA $0B                        ; STORE A 1 FOR INCREMENTING ADDRESS
  443.  438-  FAB2: A9 03       LDA #03
  444.  439-  FAB4: A8 01       LDX #01
  445.  440-  FAB6: 20 F9 DD    JSR _NUMBER                    ; CONVERT ADDRESS
  446.  441-  FAB9: C0 05       LDA $05
  447.  442-  FABB: D3 FA 90    BEQ GARBAGE
  448.  443-  FABE: A6 10       LDY #10                        ; LINE COUNT
  449.  444-  FAC0: A8 00       .LOOPLIST    LDX #00
  450.  445-  FAC2: 61 00 01    LDA ($0001),X                ; GET A BYTE
  451.  446-  FAC5: 14          TAX
  452.  447-  FAC6: AD FB FA    LDA TYPE,X                ; GET LENGTH/TYPE
  453.  448-  FAC9: C6 1A       STA $1A
  454.  449-  FACB: AD FC FA    LDA OFFSET,X                ; GET OFFSET TO LABEL
  455.  450-  FACE: C6 1B       STA $1B
  456.  451-  FAD0: C0 01       LDA $01
  457.  452-  FAD2: C2 02       LDX $02
  458.  453-  FAD4: 20 F9 20    JSR _PRINTWORD                ; PRINT ADDRESS
  459.  454-  FAD7: A9 2D       LDA #2D                        ; '-'
  460.  455-  FAD9: 20 F8 76    JSR _COUT
  461.  456-  FADC: A9 20       LDA #20
  462.  457-  FADE: 20 F8 76    JSR _COUT
  463.  458-  FAE1: A8 00       LDX #00
  464.  459-  FAE3: 61 00 01    LDA ($0001),X
  465.  460-  FAE6: C6 1C       STA $1C
  466.  461-  FAE8: 20 F8 E9    JSR _PRINTHEX                ; PRINT 1ST BYTE
  467.  462-  FAEB: A9 20       LDA #20
  468.  463-  FAED: 20 F8 76    JSR _COUT
  469.  464-  FAF0: C0 1A       LDA $1A
  470.  465-  FAF2: A0 F0       AND #F0
  471.  466-  FAF4: 54          CLC
  472.  467-  FAF5: 29          RSH
  473.  468-  FAF6: 29          RSH
  474.  469-  FAF7: 29          RSH
  475.  470-  FAF8: 29          RSH
  476.  471-  FAF9: 88 01       CMP #01
  477.  472-  FAFB: D3 FB 28    BEQ ONEBYTE
  478.  473-  FAFE: 88 02       CMP #02
  479.  474-  FB00: D3 FB 30    BEQ TWOBYTE
  480.  475-  FB03: 20 FA 50    JSR _ADD16
  481.  476-  FB06: A8 00       LDX #00
  482.  477-  FB08: 61 00 01    LDA ($0001),X
  483.  478-  FB0B: C6 1D       STA $1D
  484.  479-  FB0D: 20 F8 E9    JSR _PRINTHEX
  485.  480-  FB10: A9 20       LDA #20
  486.  481-  FB12: 20 F8 76    JSR _COUT
  487.  482-  FB15: 20 FA 50    JSR _ADD16
  488.  483-  FB18: 61 00 01    LDA ($0001),X
  489.  484-  FB1B: C6 1E       STA $1E
  490.  485-  FB1D: 20 F8 E9    JSR _PRINTHEX
  491.  486-  FB20: A9 20       LDA #20
  492.  487-  FB22: 20 F8 76    JSR _COUT
  493.  488-  FB25: 4C FB 42    JMP PRINTLABEL
  494.  489-  FB28: A8 06       .ONEBYTE    LDX #06
  495.  490-  FB2A: 20 FF D8    JSR _BLANKS
  496.  491-  FB2D: 4C FB 42    JMP PRINTLABEL
  497.  492-  FB30: 20 FA 50    .TWOBYTE    JSR _ADD16
  498.  493-  FB33: A8 00       LDX #00
  499.  494-  FB35: 61 00 01    LDA ($0001),X
  500.  495-  FB38: C6 1D       STA $1D
  501.  496-  FB3A: 20 F8 E9    JSR _PRINTHEX
  502.  497-  FB3D: A8 04       LDX #04
  503.  498-  FB3F: 20 FF D8    JSR _BLANKS
  504.  499-  FB42: C2 1B       .PRINTLABEL    LDX $1B
  505.  500-  FB44: AD FD FA    LDA LABELS,X
  506.  501-  FB47: 20 F8 76    JSR _COUT
  507.  502-  FB4A: E8          INX
  508.  503-  FB4B: AD FD FA    LDA LABELS,X
  509.  504-  FB4E: 20 F8 76    JSR _COUT
  510.  505-  FB51: E8          INX
  511.  506-  FB52: AD FD FA    LDA LABELS,X
  512.  507-  FB55: 20 F8 76    JSR _COUT
  513.  508-  FB58: A9 20       LDA #20
  514.  509-  FB5A: 20 F8 76    JSR _COUT
  515.  510-  FB5D: C0 1A       LDA $1A
  516.  511-  FB5F: A0 0F       AND #0F                        ; GET INSTRUCTION TYPE
  517.  512-  FB61: 88 00       CMP #00
  518.  513-  FB63: D3 FB 82    BEQ IMMEDIATE
  519.  514-  FB66: 88 01       CMP #01
  520.  515-  FB68: D3 FB 92    BEQ ABSOLUTE
  521.  516-  FB6B: 88 02       CMP #02
  522.  517-  FB6D: D3 FB A1    BEQ ABS.X
  523.  518-  FB70: 88 03       CMP #03
  524.  519-  FB72: D3 FB BA    BEQ ZEROPAGE
  525.  520-  FB75: 88 04       CMP #04
  526.  521-  FB77: D3 FB C7    BEQ RELATIVE
  527.  522-  FB7A: 88 05       CMP #05
  528.  523-  FB7C: D3 FB CA    BEQ INDIRECT
  529.  524-  FB7F: 4C FB EA    .IMPLIED    JMP NXTINSTR                ; IMPLIED OR UNKNOWN - END LINE
  530.  525-  FB82: A9 23       .IMMEDIATE    LDA #23                        ; '#'
  531.  526-  FB84: 20 F8 76    JSR _COUT
  532.  527-  FB87: A8 00       LDX #00
  533.  528-  FB89: 61 00 01    LDA ($0001),X                ; DATA
  534.  529-  FB8C: 20 F8 E9    JSR _PRINTHEX
  535.  530-  FB8F: 4C FB EA    JMP NXTINSTR
  536.  531-  FB92: A9 24       .ABSOLUTE    LDA #24                        ; '$'
  537.  532-  FB94: 20 F8 76    JSR _COUT
  538.  533-  FB97: C0 1D       LDA $1D
  539.  534-  FB99: C2 1E       LDX $1E
  540.  535-  FB9B: 20 F9 20    JSR _PRINTWORD
  541.  536-  FB9E: 4C FB EA    JMP NXTINSTR
  542.  537-  FBA1: A9 24       .ABS.X        LDA #24
  543.  538-  FBA3: 20 F8 76    JSR _COUT
  544.  539-  FBA6: C0 1D       LDA $1D
  545.  540-  FBA8: C2 1E       LDX $1E
  546.  541-  FBAA: 20 F9 20    JSR _PRINTWORD
  547.  542-  FBAD: A9 2C       LDA #2C
  548.  543-  FBAF: 20 F8 76    JSR _COUT
  549.  544-  FBB2: A9 58       LDA #58
  550.  545-  FBB4: 20 F8 76    JSR _COUT
  551.  546-  FBB7: 4C FB EA    JMP NXTINSTR
  552.  547-  FBBA: A9 24       .ZEROPAGE    LDA #24
  553.  548-  FBBC: 20 F8 76    JSR _COUT
  554.  549-  FBBF: C0 1D       LDA $1D
  555.  550-  FBC1: 20 F8 E9    JSR _PRINTHEX
  556.  551-  FBC4: 4C FB EA    JMP NXTINSTR
  557.  552-  FBC7: 4C FB BA    .RELATIVE    JMP ZEROPAGE                ; FOR NOW - TREAT AS ZERO PAGE
  558.  553-  FBCA: A9 28       .INDIRECT    LDA #28                        ; '('
  559.  554-  FBCC: 20 F8 76    JSR _COUT
  560.  555-  FBCF: A9 24       LDA #24
  561.  556-  FBD1: 20 F8 76    JSR _COUT
  562.  557-  FBD4: C0 1D       LDA $1D
  563.  558-  FBD6: C2 1E       LDX $1E
  564.  559-  FBD8: 20 F9 20    JSR _PRINTWORD
  565.  560-  FBDB: A9 29       LDA #29                        ; ')'
  566.  561-  FBDD: 20 F8 76    JSR _COUT
  567.  562-  FBE0: A9 2C       LDA #2C
  568.  563-  FBE2: 20 F8 76    JSR _COUT
  569.  564-  FBE5: A9 58       LDA #58
  570.  565-  FBE7: 20 F8 76    JSR _COUT
  571.  566-  FBEA: A9 0D       .NXTINSTR    LDA #0D
  572.  567-  FBEC: 20 F8 76    JSR _COUT
  573.  568-  FBEF: C5          DEY
  574.  569-  FBF0: D3 FB F9    BEQ DONELIST
  575.  570-  FBF3: 20 FA 50    JSR _ADD16                    ; GO TO NEXT ADDRESS
  576.  571-  FBF6: 4C FA C0    JMP LOOPLIST                ; AND DO IT AGAIN
  577.  572-  FBF9: 60          .DONELIST    RTS
  578.  573-            
  579.  574-            
  580.  575-  FBFA: 16171717   .TYPE        HEX 16171717    ; 00    INSTRUCTION LENGTH/TYPE
  581.  576-  FBFE: 17171716   HEX 17171716    ; 04
  582.  577-  FC02: 17171717   HEX 17171717    ; 08
  583.  578-  FC06: 17171717   HEX 17171717    ; 0C
  584.  579-  FC0A: 16161616   HEX 16161616    ; 10
  585.  580-  FC0E: 16171717   HEX 16171717    ; 14
  586.  581-  FC12: 17171717   HEX 17171717    ; 18
  587.  582-  FC16: 17171717   HEX 17171717    ; 1C
  588.  583-  FC1A: 31171717   HEX 31171717    ; 20
  589.  584-  FC1E: 17171616   HEX 17171616    ; 24
  590.  585-  FC22: 16161717   HEX 16161717    ; 28
  591.  586-  FC26: 17171717   HEX 17171717    ; 2C
  592.  587-  FC2A: 17171716   HEX 17171716    ; 30
  593.  588-  FC2E: 32321617   HEX 32321617    ; 34
  594.  589-  FC32: 17171717   HEX 17171717    ; 38
  595.  590-  FC36: 16161717   HEX 16161717    ; 3C
  596.  591-  FC3A: 17171717   HEX 17171717    ; 40
  597.  592-  FC3E: 17313117   HEX 17313117    ; 44
  598.  593-  FC42: 17171717   HEX 17171717    ; 48
  599.  594-  FC46: 31171717   HEX 31171717    ; 4C
  600.  595-  FC4A: 17171717   HEX 17171717    ; 50
  601.  596-  FC4E: 16161717   HEX 16161717    ; 54
  602.  597-  FC52: 17171717   HEX 17171717    ; 58
  603.  598-  FC56: 17171717   HEX 17171717    ; 5C
  604.  599-  FC5A: 16351735   HEX 16351735    ; 60
  605.  600-  FC5E: 17171717   HEX 17171717    ; 64
  606.  601-  FC62: 17171717   HEX 17171717    ; 68
  607.  602-  FC66: 17171717   HEX 17171717    ; 6C
  608.  603-  FC6A: 17171717   HEX 17171717    ; 70
  609.  604-  FC6E: 17171717   HEX 17171717    ; 74
  610.  605-  FC72: 17171717   HEX 17171717    ; 78
  611.  606-  FC76: 17171717   HEX 17171717    ; 7C
  612.  607-  FC7A: 17171717   HEX 17171717    ; 80
  613.  608-  FC7E: 17312017   HEX 17312017    ; 84
  614.  609-  FC82: 20313220   HEX 20313220    ; 88
  615.  610-  FC86: 31171717   HEX 31171717    ; 8C
  616.  611-  FC8A: 17171717   HEX 17171717    ; 90
  617.  612-  FC8E: 17171731   HEX 17171731    ; 94
  618.  613-  FC92: 31311717   HEX 31311717    ; 98
  619.  614-  FC96: 17171717   HEX 17171717    ; 9C
  620.  615-  FC9A: 20202017   HEX 20202017    ; A0
  621.  616-  FC9E: 20202017   HEX 20202017    ; A4
  622.  617-  FCA2: 20203131   HEX 20203131    ; A8
  623.  618-  FCA6: 31321616   HEX 31321616    ; AC
  624.  619-  FCAA: 17171717   HEX 17171717    ; B0
  625.  620-  FCAE: 17313117   HEX 17313117    ; B4
  626.  621-  FCB2: 31313231   HEX 31313231    ; B8
  627.  622-  FCB6: 17323217   HEX 17323217    ; BC
  628.  623-  FCBA: 23172317   HEX 23172317    ; C0
  629.  624-  FCBE: 23162316   HEX 23162316    ; C4
  630.  625-  FCC2: 23172323   HEX 23172323    ; C8
  631.  626-  FCC6: 23231717   HEX 23231717    ; CC
  632.  627-  FCCA: 24312431   HEX 24312431    ; D0
  633.  628-  FCCE: 24312431   HEX 24312431    ; D4
  634.  629-  FCD2: 24312431   HEX 24312431    ; D8
  635.  630-  FCD6: 24312431   HEX 24312431    ; DC
  636.  631-  FCDA: 24171717   HEX 24171717    ; E0
  637.  632-  FCDE: 17171717   HEX 17171717    ; E4
  638.  633-  FCE2: 16171617   HEX 16171617    ; E8
  639.  634-  FCE6: 17171617   HEX 17171617    ; EC
  640.  635-  FCEA: 17171717   HEX 17171717    ; F0
  641.  636-  FCEE: 17171717   HEX 17171717    ; F4
  642.  637-  FCF2: 17171717   HEX 17171717    ; F8
  643.  638-  FCF6: 17171717   HEX 17171717    ; FC
  644.  639-            
  645.  640-  FCFA: 6C9C9C9C   .OFFSET        HEX 6C9C9C9C    ; 00        OFFSET TO LABEL
  646.  641-  FCFE: 9C9C9C90   HEX 9C9C9C90    ; 04
  647.  642-  FD02: 9C9C9C9C   HEX 9C9C9C9C    ; 08
  648.  643-  FD06: 9C9C9C9C   HEX 9C9C9C9C    ; 0C
  649.  644-  FD0A: 8D8A8784   HEX 8D8A8784    ; 10
  650.  645-  FD0E: 819C9C9C   HEX 819C9C9C    ; 14
  651.  646-  FD12: 9C9C9C9C   HEX 9C9C9C9C    ; 18
  652.  647-  FD16: 9C9C9C9C   HEX 9C9C9C9C    ; 1C
  653.  648-  FD1A: 309C9C9C   HEX 309C9C9C    ; 20
  654.  649-  FD1E: 9C9C9693   HEX 9C9C9693    ; 24
  655.  650-  FD22: 63759C9C   HEX 63759C9C    ; 28
  656.  651-  FD26: 9C9C9C9C   HEX 9C9C9C9C    ; 2C
  657.  652-  FD2A: 9C9C9C78   HEX 9C9C9C78    ; 30
  658.  653-  FD2E: 2D2A7B9C   HEX 2D2A7B9C    ; 34
  659.  654-  FD32: 9C9C9C9C   HEX 9C9C9C9C    ; 38
  660.  655-  FD36: 7E669C9C   HEX 7E669C9C    ; 3C
  661.  656-  FD3A: 9C9C9C9C   HEX 9C9C9C9C    ; 40
  662.  657-  FD3E: 9C2D2A9C   HEX 9C2D2A9C    ; 44
  663.  658-  FD42: 9C9C9C9C   HEX 9C9C9C9C    ; 48
  664.  659-  FD46: 339C9C9C   HEX 339C9C9C    ; 4C
  665.  660-  FD4A: 9C9C9C9C   HEX 9C9C9C9C    ; 50
  666.  661-  FD4E: 69999C9C   HEX 69999C9C    ; 54
  667.  662-  FD52: 9C9C9C9C   HEX 9C9C9C9C    ; 58
  668.  663-  FD56: 9C9C9C9C   HEX 9C9C9C9C    ; 5C
  669.  664-  FD5A: 6F009C21   HEX 6F009C21    ; 60
  670.  665-  FD5E: 9C9C9C9C   HEX 9C9C9C9C    ; 64
  671.  666-  FD62: 9C9C9C9C   HEX 9C9C9C9C    ; 68
  672.  667-  FD66: 9C9C9C9C   HEX 9C9C9C9C    ; 6C
  673.  668-  FD6A: 9C9C9C9C   HEX 9C9C9C9C    ; 70
  674.  669-  FD6E: 9C9C9C9C   HEX 9C9C9C9C    ; 74
  675.  670-  FD72: 9C9C9C9C   HEX 9C9C9C9C    ; 78
  676.  671-  FD76: 9C9C9C9C   HEX 9C9C9C9C    ; 7C
  677.  672-  FD7A: 9C9C9C9C   HEX 9C9C9C9C    ; 80
  678.  673-  FD7E: 9C1B1B9C   HEX 9C1B1B9C    ; 84
  679.  674-  FD82: 1818181E   HEX 1818181E    ; 88
  680.  675-  FD86: 1E9C9C9C   HEX 1E9C9C9C    ; 8C
  681.  676-  FD8A: 9C9C9C9C   HEX 9C9C9C9C    ; 90
  682.  677-  FD8E: 9C9C9C15   HEX 9C9C9C15    ; 94
  683.  678-  FD92: 120F9C9C   HEX 120F9C9C    ; 98
  684.  679-  FD96: 9C9C9C9C   HEX 9C9C9C9C    ; 9C
  685.  680-  FD9A: 0F12159C   HEX 0F12159C    ; A0
  686.  681-  FD9E: 0C09069C   HEX 0C09069C    ; A4
  687.  682-  FDA2: 03000003   HEX 03000003    ; A8
  688.  683-  FDA6: 06005D60   HEX 06005D60    ; AC
  689.  684-  FDAA: 9C9C9C9C   HEX 9C9C9C9C    ; B0
  690.  685-  FDAE: 9C09279C   HEX 9C09279C    ; B4
  691.  686-  FDB2: 24210C0C   HEX 24210C0C    ; B8
  692.  687-  FDB6: 9C21099C   HEX 9C21099C    ; BC
  693.  688-  FDBA: 009C039C   HEX 009C039C    ; C0
  694.  689-  FDBE: 065A2157   HEX 065A2157    ; C4
  695.  690-  FDC2: 249C2718   HEX 249C2718    ; C8
  696.  691-  FDC6: 1B1E9C9C   HEX 1B1E9C9C    ; CC
  697.  692-  FDCA: 36363939   HEX 36363939    ; D0
  698.  693-  FDCE: 3C3C3F3F   HEX 3C3C3F3F    ; D4
  699.  694-  FDD2: 42424545   HEX 42424545    ; D8
  700.  695-  FDD6: 48484B4B   HEX 48484B4B    ; DC
  701.  696-  FDDA: 4E9C9C9C   HEX 4E9C9C9C    ; E0
  702.  697-  FDDE: 9C9C9C9C   HEX 9C9C9C9C    ; E4
  703.  698-  FDE2: 519C729C   HEX 519C729C    ; E8
  704.  699-  FDE6: 9C9C549C   HEX 9C9C549C    ; EC
  705.  700-  FDEA: 9C9C9C9C   HEX 9C9C9C9C    ; F0
  706.  701-  FDEE: 9C9C9C9C   HEX 9C9C9C9C    ; F4
  707.  702-  FDF2: 9C9C9C9C   HEX 9C9C9C9C    ; F8
  708.  703-  FDF6: 9C9C9C9C   HEX 9C9C9C9C    ; FC
  709.  704-            
  710.  705-  FDFA: 4C44414C44584C4459414443534243414E444F5241   .LABELS ASC 'LDALDXLDYADCSBCANDORA'    ; OPCODE LABELS
  711.  706-  FE0F: 454F52434D50435058435059535441535458535459   ASC 'EORCMPCPXCPYSTASTXSTY'
  712.  707-  FE24: 494E434445434A53524A4D50424E45424551424343   ASC 'INCDECJSRJMPBNEBEQBCC'
  713.  708-  FE39: 424C54424754424353424E4742504C425241494E58   ASC 'BLTBGTBCSBNGBPLBRAINX'
  714.  709-  FE4E: 494E59444558444559494E41444341524F4C504C41   ASC 'INYDEXDEYINADCAROLPLA'
  715.  710-  FE63: 434C4342524B5254534E4F50525348504850504C50   ASC 'CLCBRKRTSNOPRSHPHPPLP'
  716.  711-  FE78: 504841544158544159545841545941545853545358   ASC 'PHATAXTAYTXATYATXSTSX'
  717.  712-  FE8D: 524F524C53485345433F3F3F                     ASC 'RORLSHSEC???'
  718.  713-            
  719.  714-  FE99: A9 03       .CHANGE        LDA #03
  720.  715-  FE9B: A8 01       LDX #01
  721.  716-  FE9D: 20 F9 DD    JSR _NUMBER                    ; CONVERT ADDRESS
  722.  717-  FEA0: C0 05       LDA $05
  723.  718-  FEA2: D3 FA 90    BEQ GARBAGE
  724.  719-  FEA5: 20 FF 64    .AGAINC        JSR ADDR1                    ; DISPLAY PRESENT VALUE
  725.  720-  FEA8: A9 20       LDA #20
  726.  721-  FEAA: 20 F8 76    JSR _COUT
  727.  722-  FEAD: 20 F8 76    JSR _COUT
  728.  723-  FEB0: 20 F8 89    JSR _INPUT1                    ; GET A LINE, NO PROMPT
  729.  724-  FEB3: A9 03       LDA >TEXT
  730.  725-  FEB5: A8 00       LDX <TEXT
  731.  726-  FEB7: 20 F9 28    JSR _UPPER                    ; MAKE IT UPPERCASE
  732.  727-  FEBA: AA 03 00    LDA TEXT
  733.  728-  FEBD: 88 00       CMP #00
  734.  729-  FEBF: D3 FE FB    BEQ NXTBYTE
  735.  730-  FEC2: 88 21       CMP #21
  736.  731-  FEC4: D3 FF 0D    BEQ DONEC                    ; EXIT ON '!' CHARACTER
  737.  732-  FEC7: A9 03       LDA >TEXT
  738.  733-  FEC9: A8 00       LDX <TEXT
  739.  734-  FECB: C6 06       STA $06
  740.  735-  FECD: C8 07       STX $07
  741.  736-  FECF: A8 00       LDX #00
  742.  737-  FED1: 20 F9 89    JSR _LENGTH
  743.  738-  FED4: 86 01       CPX #01
  744.  739-  FED6: D1 FE EF    BNE DOUBLE
  745.  740-  FED9: A8 00       LDX #00                        ; SINGLE DIGIT
  746.  741-  FEDB: 61 00 06    LDA ($0006),X
  747.  742-  FEDE: E8          INX
  748.  743-  FEDF: 63 00 06    STA ($0006),X
  749.  744-  FEE2: A9 00       LDA #00
  750.  745-  FEE4: E8          INX
  751.  746-  FEE5: 63 00 06    STA ($0006),X
  752.  747-  FEE8: A8 00       LDX #00
  753.  748-  FEEA: A9 30       LDA #30
  754.  749-  FEEC: 63 00 06    STA ($0006),X
  755.  750-  FEEF: A8 00       .DOUBLE        LDX #00
  756.  751-  FEF1: 20 F9 C3    JSR _MAKEBYTE
  757.  752-  FEF4: C0 04       LDA $04
  758.  753-  FEF6: A8 00       LDX #00
  759.  754-  FEF8: 63 00 01    STA ($0001),X                ; PUT IN MEMORY
  760.  755-  FEFB: 54          .NXTBYTE    CLC
  761.  756-  FEFC: A9 01       LDA #01
  762.  757-  FEFE: B5 00 02    ADC $0002
  763.  758-  FF01: C6 02       STA $02
  764.  759-  FF03: A9 00       LDA #00
  765.  760-  FF05: B5 00 01    ADC $0001
  766.  761-  FF08: C6 01       STA $01
  767.  762-  FF0A: 4C FE A5    JMP AGAINC
  768.  763-  FF0D: 60          .DONEC        RTS
  769.  764-            
  770.  765-  FF0E: A9 03       .DUMP        LDA #03
  771.  766-  FF10: A8 01       LDX #01
  772.  767-  FF12: 20 F9 DD    JSR _NUMBER                    ; CONVERT ADDRESS
  773.  768-  FF15: C0 05       LDA $05
  774.  769-  FF17: D3 FA 90    BEQ GARBAGE                    ; CONVERSION ERROR
  775.  770-  FF1A: A6 0A       LDY #0A                        ; DUMP TEN LINES
  776.  771-  FF1C: CA 04       STY $04
  777.  772-  FF1E: C0 01       .NEXTLINE    LDA $01
  778.  773-  FF20: C2 02       LDX $02
  779.  774-  FF22: 20 F9 20    JSR _PRINTWORD
  780.  775-  FF25: A9 2D       LDA #2D
  781.  776-  FF27: 20 F8 76    JSR _COUT
  782.  777-  FF2A: A6 08       LDY #08
  783.  778-  FF2C: A8 00       LDX #00
  784.  779-  FF2E: 61 00 01    .NEXTBYTE    LDA ($0001),X                ; GET VALUE
  785.  780-  FF31: 20 F8 E9    JSR _PRINTHEX
  786.  781-  FF34: A9 20       LDA #20
  787.  782-  FF36: 20 F8 76    JSR _COUT
  788.  783-  FF39: E8          INX 
  789.  784-  FF3A: C5          DEY
  790.  785-  FF3B: D1 FF 2E    BNE NEXTBYTE
  791.  786-  FF3E: A9 0D       LDA #0D
  792.  787-  FF40: 20 F8 76    JSR _COUT
  793.  788-  FF43: 45 00 04    DEC $0004
  794.  789-  FF46: C0 04       LDA $04
  795.  790-  FF48: 88 00       CMP #00
  796.  791-  FF4A: D3 FF 7E    BEQ DONE4
  797.  792-  FF4D: A9 00       LDA #00
  798.  793-  FF4F: C6 0A       STA $0A
  799.  794-  FF51: A9 08       LDA #08
  800.  795-  FF53: C6 0B       STA $0B
  801.  796-  FF55: 20 FA 50    JSR _ADD16                    ; INCREMENT ADDRESS
  802.  797-  FF58: 4C FF 1E    JMP NEXTLINE
  803.  798-            
  804.  799-  FF5B: 20 FF 64    .ADDR        JSR ADDR1
  805.  800-  FF5E: A9 0D       LDA #0D
  806.  801-  FF60: 20 F8 76    JSR _COUT
  807.  802-  FF63: 60          RTS
  808.  803-            
  809.  804-  FF64: C0 01       .ADDR1        LDA $01                        ; SINGLE ADDRESS
  810.  805-  FF66: C2 02       LDX $02
  811.  806-  FF68: 20 F9 20    JSR _PRINTWORD
  812.  807-  FF6B: A9 2D       LDA #2D
  813.  808-  FF6D: 20 F8 76    JSR _COUT
  814.  809-  FF70: A8 00       LDX #00
  815.  810-  FF72: 61 00 01    LDA ($0001),X
  816.  811-  FF75: 20 F8 E9    JSR _PRINTHEX
  817.  812-  FF78: 60          RTS
  818.  813-            
  819.  814-  FF79: A9 0C       .HOME        LDA #0C                        ; HOME - CLEAR THE SCREEN
  820.  815-  FF7B: 20 F8 76    JSR _COUT
  821.  816-  FF7E: 60          .DONE4        RTS
  822.  817-            
  823.  818-             ;
  824.  819-             ;    _REG    OUTPUTS THE CURRENT REGISTER VALUES.
  825.  820-             ;
  826.  821-            
  827.  822-  FF7F: C6 0A       ._REG        STA $0A                        ; SAVE THE A
  828.  823-  FF81: 12          TXA
  829.  824-  FF82: C6 0B       STA $0B                        ; SAVE THE X
  830.  825-  FF84: 11          TYA
  831.  826-  FF85: C6 0C       STA $0C                        ; SAVE THE Y
  832.  827-  FF87: A9 FF       LDA >STRY                    ; MESSAGE
  833.  828-  FF89: A8 91       LDX <STRY
  834.  829-  FF8B: 20 F8 D2    JSR _PRINT
  835.  830-  FF8E: 4C FF 95    JMP NXT
  836.  831-  FF91: 593D20   .STRY        ASC 'Y= '
  837.  832-  FF94: 00   HEX 00
  838.  833-  FF95: C0 0C       .NXT        LDA $0C
  839.  834-  FF97: 20 F8 E9    JSR _PRINTHEX
  840.  835-  FF9A: A8 02       LDX #02
  841.  836-  FF9C: 20 FF D8    JSR _BLANKS
  842.  837-  FF9F: A9 FF       LDA >STRX
  843.  838-  FFA1: A8 A9       LDX <STRX
  844.  839-  FFA3: 20 F8 D2    JSR _PRINT
  845.  840-  FFA6: 4C FF AD    JMP NXT2
  846.  841-  FFA9: 583D20   .STRX        ASC 'X= '
  847.  842-  FFAC: 00   HEX 00
  848.  843-  FFAD: C0 0B       .NXT2        LDA $0B
  849.  844-  FFAF: 20 F8 E9    JSR _PRINTHEX
  850.  845-  FFB2: A8 02       LDX #02
  851.  846-  FFB4: 20 FF D8    JSR _BLANKS
  852.  847-  FFB7: A9 FF       LDA >STRA
  853.  848-  FFB9: A8 C1       LDX <STRA
  854.  849-  FFBB: 20 F8 D2    JSR _PRINT
  855.  850-  FFBE: 4C FF C5    JMP NXT3
  856.  851-  FFC1: 413D20   .STRA        ASC 'A= '
  857.  852-  FFC4: 00   HEX 00
  858.  853-  FFC5: C0 0A       .NXT3        LDA $0A
  859.  854-  FFC7: 20 F8 E9    JSR _PRINTHEX
  860.  855-  FFCA: A9 0D       LDA #0D
  861.  856-  FFCC: 20 F8 76    JSR _COUT
  862.  857-  FFCF: C0 0C       LDA $0C                            ; RESTORE REGISTERS
  863.  858-  FFD1: 13          TAY
  864.  859-  FFD2: C0 0B       LDA $0B
  865.  860-  FFD4: 14          TAX
  866.  861-  FFD5: C0 0A       LDA $0A
  867.  862-  FFD7: 60          RTS
  868.  863-            
  869.  864-             ;
  870.  865-             ; _BLANKS    OUTPUT BLANKS, NUMBER IN X.  DESTROYS A.
  871.  866-             ;
  872.  867-            
  873.  868-  FFD8: A9 20       ._BLANKS    LDA #20
  874.  869-  FFDA: 20 F8 76    .LOOPBL        JSR _COUT
  875.  870-  FFDD: C7          DEX
  876.  871-  FFDE: D3 FF E4    BEQ DONEBL
  877.  872-  FFE1: 4C FF DA    JMP LOOPBL
  878.  873-  FFE4: 60          .DONEBL        RTS
  879.  874-            
  880.  875-            
  881.  876-            
  882.  
  883. Symbol Table
  884.  
  885. [0200] KOUT        [0201] CSTB        [0202] KBDS        [0203] KEYB        
  886. [0100] STAK        [FFFD] COLD        [FFFA] BREAK       [0300] TEXT        
  887. [0000] ZERO        [F800] _MON        [F80F] MESSAGE     [F830] VERSION     
  888. [F832] _MON1       [F851] _BRK        [F85E] STRNG       [F867] NXTBRK      
  889. [F876] _COUT       [F87D] _KEYIN      [F884] _INPUT      [F889] _INPUT1     
  890. [F88B] LOOP        [F8AA] DEL         [F8BD] DONE        [F8CA] NOCHAR      
  891. [F8D0] FINISH      [F8D1] END         [F8D2] _PRINT      [F8D6] PRINT1      
  892. [F8D8] LOOP2       [F8E8] DONE2       [F8E9] _PRINTHEX   [F8FF] HEX1        
  893. [F905] NEXT        [F917] HEX2        [F91D] END2        [F920] _PRINTWORD  
  894. [F928] _UPPER      [F92C] _UPPER1     [F92E] LOOP3       [F93C] RANGE1      
  895. [F944] RANGE2      [F94A] NEXT2       [F951] DONE3       [F952] _KILLB      
  896. [F956] _KILLB1     [F958] LOOPK       [F96C] SHIFT       [F96F] LOOPS       
  897. [F983] DONES       [F988] DONEK       [F989] _LENGTH     [F98B] LOOPL       
  898. [F998] MAX         [F99A] QUIT        [F99B] _MAKEHEX    [F9B0] DIGIT1      
  899. [F9B8] OK1         [F9BE] ERRM        [F9C2] DONEH       [F9C3] _MAKEBYTE   
  900. [F9DD] _NUMBER     [F9E1] _NUMBER1    [FA02] ONEN        [FA13] TWON        
  901. [FA23] THREEN      [FA38] FOURN       [FA4C] ERRORN      [FA4F] DONEN       
  902. [FA50] _ADD16      [FA60] _EXECUTE    [FA90] GARBAGE     [FA9B] GO          
  903. [FAAB] LIST        [FAC0] LOOPLIST    [FB28] ONEBYTE     [FB30] TWOBYTE     
  904. [FB42] PRINTLABEL  [FB7F] IMPLIED     [FB82] IMMEDIATE   [FB92] ABSOLUTE    
  905. [FBA1] ABS.X       [FBBA] ZEROPAGE    [FBC7] RELATIVE    [FBCA] INDIRECT    
  906. [FBEA] NXTINSTR    [FBF9] DONELIST    [FBFA] TYPE        [FCFA] OFFSET      
  907. [FDFA] LABELS      [FE99] CHANGE      [FEA5] AGAINC      [FEEF] DOUBLE      
  908. [FEFB] NXTBYTE     [FF0D] DONEC       [FF0E] DUMP        [FF1E] NEXTLINE    
  909. [FF2E] NEXTBYTE    [FF5B] ADDR        [FF64] ADDR1       [FF79] HOME        
  910. [FF7E] DONE4       [FF7F] _REG        [FF91] STRY        [FF95] NXT         
  911. [FFA9] STRX        [FFAD] NXT2        [FFC1] STRA        [FFC5] NXT3        
  912. [FFD8] _BLANKS     [FFDA] LOOPBL      [FFE4] DONEBL      
  913.